package com.apple1.blogservices.impl;

import com.apple1.blogdao.ArticleTagMapper;
import com.apple1.blogdao.TagMapper;
import com.apple1.blogentity.ArticleTag;
import com.apple1.blogentity.ArticleTagExample;
import com.apple1.blogentity.Tag;
import com.apple1.blogentity.TagExample;
import com.apple1.blogentity.vo.TagVo;
import com.apple1.blogservices.TagService;
import com.apple1.commonutil.BeanMapUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 *
 * @author chencheng
 */
@Service
public class TagServiceImpl implements TagService {
    @Autowired
    TagMapper tagMapper;

    @Autowired
    ArticleTagMapper articleTagMapper;
    /**
     * 方法名: 添加标签
     * 处理逻辑:
     * note(注意):
     * @param tagVo
     * @return int
     */
    @Override
    public int addTag(TagVo tagVo) {
        if (tagVo == null || tagVo.getTag() == null){
            return 0;
        }
        Tag mapBean = BeanMapUtil.getMapBean(tagVo, Tag.class);
        mapBean.setTableId(null);
        return tagMapper.insertSelective(mapBean);
    }
    /**
     * 方法名: 根据标签id删除标签
     * 处理逻辑: 1.删除ref_article_tag表的所有跟此标签有关的数据 2.删除标签
     * note(注意): 事务
     * @param tag_id
     * @return int 0-失败 非0-成功
     */
    @Override
    public int delTagById(Integer tag_id) {
        if (tag_id == null){
            return 0;
        }
        //首先删除ref_article_tag中便签相关的行
        ArticleTagExample articleTagExample = new ArticleTagExample();
        ArticleTagExample.Criteria criteria = articleTagExample.createCriteria();
        criteria.andTagIdEqualTo(tag_id);

        int i = articleTagMapper.deleteByExample(articleTagExample);
        //删除标签

        TagExample tagExample = new TagExample();
        TagExample.Criteria criteria1 = tagExample.createCriteria();
        criteria1.andTableIdEqualTo(tag_id);

        int i1 = tagMapper.deleteByExample(tagExample);

        return i1;
    }
    /**
     * 方法名: 更新标签
     * 处理逻辑:
     * note(注意):
     * @param tagVo
     * @return int 0-失败 非0-成功
     */
    @Override
    public int updateTag(TagVo tagVo) {
        if (tagVo == null || tagVo.getTag() == null){
            return 0;
        }
        Tag mapBean = BeanMapUtil.getMapBean(tagVo, Tag.class);

        TagExample tagExample = new TagExample();
        TagExample.Criteria criteria = tagExample.createCriteria();
        criteria.andTableIdEqualTo(tagVo.getTableId());
        mapBean.setTableId(null);

        return tagMapper.updateByExampleSelective(mapBean,tagExample);
    }

    /**
     * 方法名: 根据tag_id查询标签
     * 处理逻辑:
     * note(注意):
     * @param tag_id
     * @return com.apple1.blogentity.vo.TagVo
     */
    @Override
    public TagVo selectTagById(Integer tag_id) {
        if (tag_id == null){
            return null;
        }
        TagExample tagExample = new TagExample();
        TagExample.Criteria criteria = tagExample.createCriteria();
        criteria.andTableIdEqualTo(tag_id);

        List<Tag> tags = tagMapper.selectByExample(tagExample);

        if (tags == null || tags.isEmpty()){
            return null;
        }
        Tag tag = tags.get(0);

        return BeanMapUtil.getMapBean(tag,TagVo.class);
    }
}
